1. failed to fetch,MySQL取出double数据如何传给c?
C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作mysql的两种方式
使用vs2013和64位的msql 5.6.16进行操作
项目中使用的数据库名为booktik
表为book
……….
(共有30条记录,只列出了部分记录,14-30未列出)
一、通过mysql的C api进行操作
1、新建一个空项目
2、将D:\Program Files\MySQL\MySQL Server 5.6\include添加到项目的包含目录中(根据具体路径而定)
3、将D:\Program Files\MySQL\MySQL Server 5.6\lib添加到项目的库目录中(根据具体路径而定)
4、添加libmysql.lib至附加依赖项中
(*3.4步也可以在程序代码的开始处加上#pragma comment(lib,"D:\\Program Files\\MySQL\\MySQL Server 5.6\\lib\\libmysql.lib") 来导入libmysql.lib)
5、如果使用的mysql是64位的,还需要将项目的解决方案平台由win32改成x64
6、将D:\Program Files\MySQL\MySQL Server 5.6\lib(根据具体路径而定)下的libmysql.dll复制到项目中去,和.cpp,.h文件位于同一路径下
至此,相关配置全部完成
程序代码
main.cpp
#include <Windows.h> #include <mysql.h> #include <string> #include <iostream> using namespace std; #pragma comment(lib,"D:\\Program Files\\MySQL\\MySQL Server 5.6\\lib\\libmysql.lib") int main() { const char user[] = "root"; const char pswd[] = "123456"; const char host[] = "localhost"; const char table[] = "booktik"; unsigned int port = 3306; MYSQL myCont; MYSQL_RES *result; MYSQL_ROW sql_row; int res; mysql_init(&myCont); if (mysql_real_connect(&myCont, host, user, pswd, table, port, NULL, 0)) { mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式 res = mysql_query(&myCont, "select * from book");//查询 if (!res) { result = mysql_store_result(&myCont); if (result) { while (sql_row = mysql_fetch_row(result))//获取具体的数据 { cout<<"BOOKNAME:" << sql_row[1] << endl; cout<<" SIZE:" << sql_row[2] << endl; } } } else { cout << "query sql failed!" << endl; } } else { cout << "connect failed!" << endl; } if (result != NULL) mysql_free_result(result); mysql_close(&myCont); system("pause"); return 0; }运行结果如下:
二、通过mysql的Connector C++ 1.1.3进行操作
MySQL C++ Driver的实现基于JDBC规范MySQL Connector/C++是由Sun Microsystems开发的MySQL连接器。它提供了基于OO的编程接口与数据库驱动来操作MySQL服务器。与许多其他现存的C++接口实现不同,Connector/C++遵循了JDBC规范。也就是说,Connector/C++ Driver的API主要是基于Java语言的JDBC接口。JDBC是java语言与各种数据库连接的标准工业接口。Connector/C++实现了大部分JDBC规范。如果C++程序的开发者很熟悉JDBC编程,将很快的入门。
MySQL Connector/C++需要安装配置boost库,boost库安装编译在这里不进行阐述
1、新建一个空项目
2、将D:\Program Files\MySQL\Connector C++ 1.1.3\include添加到项目的包含目录中(根据具体路径而定)
3、将D:\boost\boost_1_55_0添加到项目的包含目录中(根据具体路径而定)
4、将D:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt添加到项目的库目录中(根据具体路径而定)
5、添加mysqlcppconn.lib至附加依赖项中
6、如果使用的mysql是64位的,还需要将项目的解决方案平台由win32改成x64
7、将D:\Program Files\MySQL\Connector C++ 1.1.3\lib\opt(根据具体路径而定)下的mysqlcppconn.dll复制到项目中去,和.cpp,.h文件位于同一路径下
将D:\Program Files\MySQL\MySQL Server 5.6\lib(根据具体路径而定)下的libmysql.dll复制到项目中去,和.cpp,.h文件位于同一路径下
至此,相关配置全部完成
程序代码
main.cpp
#include <iostream> #include <map> #include <string> #include <memory> #include "mysql_driver.h" #include "mysql_connection.h" #include "cppconn/driver.h" #include "cppconn/statement.h" #include "cppconn/prepared_statement.h" #include "cppconn/metadata.h" #include "cppconn/exception.h" using namespace std; using namespace sql; int main() { sql::mysql::MySQL_Driver *driver = 0; sql::Connection *conn = 0; try { driver = sql::mysql::get_mysql_driver_instance(); conn = driver->connect("tcp://localhost:3306/booktik", "root", "123456"); cout << "连接成功" << endl; } catch (...) { cout << "连接失败" << endl; } sql::Statement* stat = conn->createStatement(); stat->execute("set names 'gbk'"); ResultSet *res; res = stat->executeQuery("SELECT * FROM BOOK"); while (res->next()) { cout << "BOOKNAME:" << res->getString("bookname") << endl; cout << " SIZE:" << res->getString("size") << endl; } if (conn != 0) { delete conn; } system("pause"); }运行结果
2. error503backendfetchfailed什么意思?
503是一种http状态码。英文名503serviceunavailable与404(404serviceunavailable)是同属一种网页状态出错码。
跟你的浏览器没有什么关系一般就是你访问的服务器维护或者过载导致不能访问那是你访问的网站的问题如果一直不能访问肯定是服务器维护了
3. 苹果故障代码怎么看?
Kernel data abort:CPU供电/虚焊/断线
AMCC Error:光线感应器
AppleSOC hot hot hot:CPU/wifi/音频ic
PMP NMI FIQ:CPU供电
baseband:基带
Firmware fatal:底层/固件
ANS2/ANS:硬盘/主板断线
SMC DATA ABORT:CPU通信异常
nvme:硬盘
Attemping to forcibly halt CPU^cpu0fail to halt with error:CPU虚焊
Anc-postnand.c1260asser failed link:硬盘
XS XSMAX:按WDT timeout,或陀螺仪
fed err(parity counter overflow multi hit ICTAG)reported via serror:硬盘/暂存
NO pulse on:震动或铃声
Stacks routinde:电池接触不良?
dart-disp0SMMUerror:相机电路/后摄总线
Invaild queue element linkage:硬盘
MIC-temp-sens2:MIC/开机排线
SCL display PMU:屏幕/显示供电
GFX GPU:gpu供电
fetal coherency point:CPU供电
applesmartIO:firmware fatal prefetch abort:系统问题
Appletristar2:could not find system:尾排
AGXKcceletor:协处理器/陀螺仪/加速器
apcie(0:s3e):硬盘
apcie(wlan):wifi
CP_COM_NORM REQUEST:硬盘/CPU/camera
AOP NMI POWER:开机键/前排线
sks request timeout:逻辑码片CPU断线
Initproc exited/bad tailq elm/prev next:晶振
LLC:基带/音频
A freed zone element has been modified:CPU空焊
SMC PANIC:CPU供电
sleep\wake hang detected:音频/cpu供电
WKDMD ERROR wxxxcode-style0x2:硬盘(刷机报错14)
kernel instruction fetch abort:快充/cpu通信
LSU:主时钟
Void applesynopsysMIPID SIController:前排
L2c:音频(听筒功放线路)
4. onetomany怎么使用?
你这个问题并不是你注解用的不对而是你调用获取结果的时机有问题,你在一个事务里面查询出结果后类的logs属性并没有真正拿到值,这时候的logs只是一个代理,因为默认情况下onetomany是懒加载的。
而这个时候你查询但结果后吧事务关闭了以后再去掉getlogs这时候代理需要的sesaion已经没有了,因此就只能抛出懒加载异常,意思告诉你这个属性采用的是懒加载,但是要获取实际值的时候已经没有session了,也就是对应的事务关闭了
处理办法有一下几种
1、如果是web项目可以添加openSessionInView的过滤器,它可以让session打开关闭的时机推迟到页面处理前后,这样sessoon就不会因为service处理后自动关闭了,但是改变了默认关闭时机会带来其他一些隐患不推荐,这里不展开了
2、配置fetch属性变成eager,这个要看你的业务适不适合,如果关键查询出大量数据会有性能问题
3、在同一个session内部对需要加载出来的属性先调用get加载出来
4、放弃映射关系,需要时候直接采用传统sql查询
大致就是这几种方式挑一个合适你的去用吧